From 8c71a0d4c53feebb000c23b975518b6fadb9cf24 Mon Sep 17 00:00:00 2001 From: Simos Xenitellis Date: Wed, 10 Sep 2008 18:03:53 +0000 Subject: [PATCH] =?utf8?q?Closed=20Bug=20550676=20=E2=80=93=20Memory=20lea?= =?utf8?q?k,=20update=20keyboard=20layout=20data=20table?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit svn path=/trunk/; revision=21339 --- ChangeLog | 18 ++ gtk/compose-parse.py | 55 +++- gtk/gtkimcontextsimple.c | 188 +++++++------ gtk/gtkimcontextsimpleseqs.h | 503 ++++++++++++++++++----------------- 4 files changed, 424 insertions(+), 340 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2787355bb4..9df86e3991 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2008-09-10 Simos Xenitellis + + Bug 550676 – Memory leak, update keyboard layout data structure + + * gtk/gtkimcontextsimple.c (check_normalize_nfc): Added + function that checks if unicode sequence can be normalised (NFC) + to single character. Fixed memory leaks. + (check_algorithmically): Moved code to check_normalize_nfc, + updated switch statement for dead keys. + (gtk_im_context_simple_filter_keypress): Changed order; first + check_algorithmically() is attempted, then check_compact_table(). + + * gtk/gtkimcontextsimpleseqs.c: Updated compose sequence table + gtk_compose_seqs_compac[]. + + * gtk/compose-parse.py: Updated compose table generation script, + matches output to gtk/gtkimcontextsimpleseqs.c. + Wed Sep 10 06:18:25 2008 Søren Sandmann * gdk/x11/gdkscreen-x11.c (init_multihead): Don't use diff --git a/gtk/compose-parse.py b/gtk/compose-parse.py index 0a0119ea82..f37ac04dbc 100755 --- a/gtk/compose-parse.py +++ b/gtk/compose-parse.py @@ -279,9 +279,17 @@ def process_gdkkeysymsh(): """ Patch up the keysymdb with some of our own stuff """ - """ This is for a missing keysym from the currently upstread file """ + """ This is for a missing keysym from the currently upstream file """ keysymdb['dead_stroke'] = 0x338 + """ This is for a missing keysym from the currently upstream file """ + ###keysymdb['dead_belowring'] = 0x323 + ###keysymdb['dead_belowmacron'] = 0x331 + ###keysymdb['dead_belowcircumflex'] = 0x32d + ###keysymdb['dead_belowtilde'] = 0x330 + ###keysymdb['dead_belowbreve'] = 0x32e + ###keysymdb['dead_belowdiaeresis'] = 0x324 + """ This is^Wwas preferential treatment for Greek """ # keysymdb['dead_tilde'] = 0x342 """ This is^was preferential treatment for Greek """ @@ -327,6 +335,13 @@ def process_keysymstxt(): keysymstxt.close() """ Patch up the keysymdb with some of our own stuff """ + """ This is for a missing keysym from the currently upstream file """ + ###keysymdb['dead_belowring'] = 0x323 + ###keysymdb['dead_belowmacron'] = 0x331 + ###keysymdb['dead_belowcircumflex'] = 0x32d + ###keysymdb['dead_belowtilde'] = 0x330 + ###keysymdb['dead_belowbreve'] = 0x32e + ###keysymdb['dead_belowdiaeresis'] = 0x324 """ This is preferential treatment for Greek """ """ => we get more savings if used for Greek """ @@ -337,7 +352,7 @@ def process_keysymstxt(): """ This is for a missing keysym from Markus Kuhn's db """ keysymdb['dead_stroke'] = 0x338 """ This is for a missing keysym from Markus Kuhn's db """ - # keysymdb['Oslash'] = 0x0d8 + keysymdb['Oslash'] = 0x0d8 """ This is for a missing (recently added) keysym """ keysymdb['dead_psili'] = 0x313 @@ -362,8 +377,9 @@ def keysymvalue(keysym, file = "n/a", linenum = 0): elif keysym[:2] == '0x' and match('[0-9a-fA-F]+$', keysym[2:]): return atoi(keysym[2:], 16) else: - print 'UNKNOWN{%(keysym)s}' % { "keysym": keysym } - sys.exit(-1) + #print 'UNKNOWN{%(keysym)s}' % { "keysym": keysym } + return -1 + #sys.exit(-1) def keysymunicodevalue(keysym, file = "n/a", linenum = 0): """ Extracts a value from the keysym """ @@ -428,13 +444,21 @@ for line in composefile.readlines(): values = split('\s+', val) unichar_temp = split('"', values[0]) unichar = unichar_temp[1] + if len(values) == 1: + continue codepointstr = values[1] + if values[1] == '#': + # No codepoints that are >1 characters yet. + continue if raw_sequence[0][0] == 'U' and match('[0-9a-fA-F]+$', raw_sequence[0][1:]): raw_sequence[0] = '0x' + raw_sequence[0][1:] if codepointstr[0] == 'U' and match('[0-9a-fA-F]+$', codepointstr[1:]): codepoint = atoi(codepointstr[1:], 16) - elif keysymdatabase.has_key(codepointstr): - codepoint = keysymdatabase[codepointstr] + elif keysymunicodedatabase.has_key(codepointstr): + if keysymdatabase[codepointstr] != keysymunicodedatabase[codepointstr]: + print "DIFFERENCE: 0x%(a)X 0x%(b)X" % { "a": keysymdatabase[codepointstr], "b": keysymunicodedatabase[codepointstr]}, + print raw_sequence, codepointstr + codepoint = keysymunicodedatabase[codepointstr] else: print print "Invalid codepoint at line %(linenum_compose)d in %(filename)s:\ @@ -448,13 +472,21 @@ for line in composefile.readlines(): if opt_plane1: print sequence break + if keysymvalue(i) < 0: + reject_this = True + break if reject_this: continue - if "U0313" in sequence or "U0314" in sequence or "0x0313" in sequence or "0x0314" in sequence: + if "U0342" in sequence or \ + "U0313" in sequence or \ + "U0314" in sequence or \ + "0x0313" in sequence or \ + "0x0342" in sequence or \ + "0x0314" in sequence: continue - for i in range(len(sequence)): - if sequence[i] == "0x0342": - sequence[i] = "dead_tilde" + #for i in range(len(sequence)): + # if sequence[i] == "0x0342": + # sequence[i] = "dead_tilde" if "Multi_key" not in sequence: """ Ignore for now >0xFFFF keysyms """ if codepoint < 0xFFFF: @@ -473,7 +505,7 @@ for line in composefile.readlines(): because of lack of dead_perispomeni (i.e. conflict) """ bc = basechar - if sequence[-1] == "dead_tilde" and (bc >= 0x370 and bc <= 0x3ff) or (bc >= 0x1f00 and bc <= 0x1fff): + """if sequence[-1] == "dead_tilde" and (bc >= 0x370 and bc <= 0x3ff) or (bc >= 0x1f00 and bc <= 0x1fff): skipping_this = True break if sequence[-1] == "dead_horn" and (bc >= 0x370 and bc <= 0x3ff) or (bc >= 0x1f00 and bc <= 0x1fff): @@ -486,6 +518,7 @@ for line in composefile.readlines(): sequence[i] = "dead_horn" if sequence[-1] == "dead_dasia": sequence[-1] = "dead_ogonek" + """ unisequence.append(unichr(keysymunicodevalue(sequence.pop(), filename_compose, linenum_compose))) if skipping_this: diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c index 8e5813796f..bb49d21db7 100644 --- a/gtk/gtkimcontextsimple.c +++ b/gtk/gtkimcontextsimple.c @@ -61,7 +61,7 @@ struct _GtkComposeTableCompact static const GtkComposeTableCompact gtk_compose_table_compact = { gtk_compose_seqs_compact, 5, - 21, + 22, 6 }; @@ -340,10 +340,77 @@ check_compact_table (GtkIMContextSimple *context_simple, return FALSE; } +/* This function receives a sequence of Unicode characters and tries to + * normalize it (NFC). We check for the case the the resulting string + * has length 1 (single character). + * NFC normalisation normally rearranges diacritic marks, unless these + * belong to the same Canonical Combining Class. + * If they belong to the same canonical combining class, we produce all + * permutations of the diacritic marks, then attempt to normalize. + */ +static gboolean +check_normalize_nfc (gunichar* combination_buffer, gint n_compose) +{ + gunichar combination_buffer_temp[GTK_MAX_COMPOSE_LEN]; + gchar *combination_utf8_temp = NULL; + gchar *nfc_temp = NULL; + gint n_combinations; + gunichar temp_swap; + gint i; + + n_combinations = 1; + + for (i = 1; i < n_compose; i++ ) + n_combinations *= i; + + /* Xorg reuses dead_tilde for the perispomeni diacritic mark. + * We check if base character belongs to Greek Unicode block, + * and if so, we replace tilde with perispomeni. */ + if (combination_buffer[0] >= 0x390 && combination_buffer[0] <= 0x3FF) + { + for (i = 1; i < n_compose; i++ ) + if (combination_buffer[i] == 0x303) + combination_buffer[i] = 0x342; + } + + memcpy (combination_buffer_temp, combination_buffer, GTK_MAX_COMPOSE_LEN * sizeof (gunichar) ); + + for (i = 0; i < n_combinations; i++ ) + { + g_unicode_canonical_ordering (combination_buffer_temp, n_compose); + combination_utf8_temp = g_ucs4_to_utf8 (combination_buffer_temp, -1, NULL, NULL, NULL); + nfc_temp = g_utf8_normalize (combination_utf8_temp, -1, G_NORMALIZE_NFC); + + if (g_utf8_strlen (nfc_temp, -1) == 1) + { + memcpy (combination_buffer, combination_buffer_temp, GTK_MAX_COMPOSE_LEN * sizeof (gunichar) ); + + g_free (combination_utf8_temp); + g_free (nfc_temp); + + return TRUE; + } + + g_free (combination_utf8_temp); + g_free (nfc_temp); + + if (n_compose > 2) + { + temp_swap = combination_buffer_temp[i % (n_compose - 1) + 1]; + combination_buffer_temp[i % (n_compose - 1) + 1] = combination_buffer_temp[(i+1) % (n_compose - 1) + 1]; + combination_buffer_temp[(i+1) % (n_compose - 1) + 1] = temp_swap; + } + else + break; + } + + return FALSE; +} + /* When updating the table of the compose sequences, also update here. */ #define IS_DEAD_KEY(k) \ - (((k) >= GDK_dead_grave && (k) <= GDK_dead_stroke) || \ + (((k) >= GDK_dead_grave && (k) <= (GDK_dead_dasia+1)) || \ g_unichar_type (gdk_keyval_to_unicode (k)) == G_UNICODE_NON_SPACING_MARK) static gboolean @@ -351,12 +418,9 @@ check_algorithmically (GtkIMContextSimple *context_simple, gint n_compose) { - int i; - int k; + gint i; gunichar combination_buffer[GTK_MAX_COMPOSE_LEN]; - gunichar combination_buffer_temp[GTK_MAX_COMPOSE_LEN]; gchar *combination_utf8, *nfc; - gchar *combination_utf8_temp = NULL, *nfc_temp = NULL; if (n_compose >= GTK_MAX_COMPOSE_LEN) return FALSE; @@ -381,39 +445,33 @@ check_algorithmically (GtkIMContextSimple *context_simple, CASE (grave, 0x0300); CASE (acute, 0x0301); CASE (circumflex, 0x0302); - CASE (tilde, 0x0303); /* Normally is 0x303; Greek Polytonic needs 0x342. - * We modified the compose sequences for now - * so that for Greek we don't apply algorithmic - * when perispomeni (0x342) is required - * Filed report; pending, bug 14013 (Freedesktop). - */ + CASE (tilde, 0x0303); /* Also used with perispomeni, 0x342. */ CASE (macron, 0x0304); CASE (breve, 0x0306); CASE (abovedot, 0x0307); CASE (diaeresis, 0x0308); + CASE (hook, 0x0309); CASE (abovering, 0x030A); CASE (doubleacute, 0x030B); CASE (caron, 0x030C); + CASE (abovecomma, 0x0313); /* Equivalent to psili */ + CASE (abovereversedcomma, 0x0314); /* Equivalent to dasia */ + CASE (horn, 0x031B); /* Legacy use for psili, 0x313 (or 0x343). */ + CASE (belowdot, 0x0323); CASE (cedilla, 0x0327); - CASE (ogonek, 0x0328); /* Normally is 0x328; Greek Polytonic needs 0x314. - * We modified the compose sequences for now to - * so that for Greek we don't apply algorithmic - * when dasia (0x314) is required - * Patch accepted in Xorg/GIT, may take a bit to propagate. - */ - CASE (dasia, 0x314); - CASE (iota, 0x0345); /* Used by Greek Polytonic layout only; "ypogegrammeni" */ + CASE (ogonek, 0x0328); /* Legacy use for dasia, 0x314.*/ + CASE (iota, 0x0345); CASE (voiced_sound, 0x3099); /* Per Markus Kuhn keysyms.txt file. */ - CASE (semivoiced_sound, 0x309a); /* Per Markus Kuhn keysyms.txt file. */ - CASE (belowdot, 0x0323); - CASE (hook, 0x0309); - CASE (horn, 0x031b); /* Normally is 0x31b; Greek Polytonic needs 0x313 (or 0x343). - * We modified the compose sequences for now to - * so that for Greek we don't apply algorithmic - * when psili (0x343) is required - * Patch accepted in Xorg/GIT, may take a bit to propagate. - */ - CASE (psili, 0x343); + CASE (semivoiced_sound, 0x309A); /* Per Markus Kuhn keysyms.txt file. */ + + /* The following cases are to be removed once xkeyboard-config, + * xorg are fully updated. + */ + /* Workaround for typo in 1.4.x xserver-xorg */ + case 0xfe66: combination_buffer[i+1] = 0x314; break; + /* CASE (dasia, 0x314); */ + /* CASE (perispomeni, 0x342); */ + /* CASE (psili, 0x343); */ #undef CASE default: combination_buffer[i+1] = gdk_keyval_to_unicode (context_simple->compose_buffer[i]); @@ -421,56 +479,24 @@ check_algorithmically (GtkIMContextSimple *context_simple, i--; } - if (n_compose > 2) - { - gint n_combinations; - gunichar temp_swap; - - /* We calculate the number of permutations of the diacritic marks, factorial(n_compose-1). - * When diacritic marks belong to the same Canonical Combining Class, - * a normalisation does not attempt reorder them, thus we do this ourselves. - */ - n_combinations = 1; - for (k = 1; k < n_compose; k++ ) - n_combinations *= k; - - memcpy (combination_buffer_temp, combination_buffer, GTK_MAX_COMPOSE_LEN * sizeof (gunichar) ); - - for (k = 0; k < n_combinations; k++ ) - { - g_unicode_canonical_ordering (combination_buffer_temp, n_compose); - combination_utf8_temp = g_ucs4_to_utf8 (combination_buffer_temp, -1, NULL, NULL, NULL); - nfc_temp = g_utf8_normalize (combination_utf8_temp, -1, G_NORMALIZE_NFC); - - if (g_utf8_strlen (nfc_temp, -1) == 1) - { - memcpy (combination_buffer, combination_buffer_temp, GTK_MAX_COMPOSE_LEN * sizeof (gunichar) ); - break; - } - - temp_swap = combination_buffer_temp[k % (n_compose - 1) + 1]; - combination_buffer_temp[k % (n_compose - 1) + 1] = combination_buffer_temp[(k+1) % (n_compose - 1) + 1]; - combination_buffer_temp[(k+1) % (n_compose - 1) + 1] = temp_swap; - } - - g_free (combination_utf8_temp); - g_free (nfc_temp); - } + /* If the buffer normalizes to a single character, + * then modify the order of combination_buffer accordingly, if necessary, + * and return TRUE. + */ + if (check_normalize_nfc (combination_buffer, n_compose)) + { + combination_utf8 = g_ucs4_to_utf8 (combination_buffer, -1, NULL, NULL, NULL); + nfc = g_utf8_normalize (combination_utf8, -1, G_NORMALIZE_NFC); - combination_utf8 = g_ucs4_to_utf8 (combination_buffer, -1, NULL, NULL, NULL); - nfc = g_utf8_normalize (combination_utf8, -1, G_NORMALIZE_NFC); - if (g_utf8_strlen (nfc, -1) == 1) - { - gunichar value = g_utf8_get_char (nfc); - gtk_im_context_simple_commit_char (GTK_IM_CONTEXT (context_simple), value); - context_simple->compose_buffer[0] = 0; + gunichar value = g_utf8_get_char (nfc); + gtk_im_context_simple_commit_char (GTK_IM_CONTEXT (context_simple), value); + context_simple->compose_buffer[0] = 0; - g_free (combination_utf8); - g_free (nfc); - return TRUE; - } - g_free (combination_utf8); - g_free (nfc); + g_free (combination_utf8); + g_free (nfc); + + return TRUE; + } } return FALSE; @@ -899,11 +925,11 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context, tmp_list = tmp_list->next; } - if (check_compact_table (context_simple, >k_compose_table_compact, n_compose)) - return TRUE; - if (check_algorithmically (context_simple, n_compose)) return TRUE; + + if (check_compact_table (context_simple, >k_compose_table_compact, n_compose)) + return TRUE; } /* The current compose_buffer doesn't match anything */ diff --git a/gtk/gtkimcontextsimpleseqs.h b/gtk/gtkimcontextsimpleseqs.h index bcc68709c1..2d50904e70 100644 --- a/gtk/gtkimcontextsimpleseqs.h +++ b/gtk/gtkimcontextsimpleseqs.h @@ -67,27 +67,47 @@ */ static const guint16 gtk_compose_seqs_compact[] = { -GDK_dead_grave, 126, 182, 269, 481, 481, -GDK_dead_acute, 481, 539, 632, 900, 900, -GDK_dead_circumflex, 900, 988, 988, 1188, 1188, -GDK_dead_tilde, 1188, 1248, 1311, 1451, 1451, -GDK_dead_macron, 1451, 1475, 1475, 1547, 1547, -GDK_dead_breve, 1547, 1583, 1583, 1599, 1599, -GDK_dead_abovedot, 1599, 1613, 1613, 1645, 1645, -GDK_dead_diaeresis, 1645, 1709, 1709, 1733, 1733, -GDK_dead_abovering, 1733, 1737, 1737, 1737, 1737, -GDK_dead_doubleacute, 1737, 1745, 1745, 1745, 1745, -GDK_dead_caron, 1745, 1749, 1749, 1757, 1757, -GDK_dead_cedilla, 1757, 1761, 1761, 1761, 1761, -GDK_dead_ogonek, 1761, 1797, 1797, 1797, 1797, -GDK_dead_iota, 1797, 1819, 1927, 2407, 3127, -GDK_dead_voiced_sound, 3127, 3173, 3173, 3173, 3173, -GDK_dead_semivoiced_sound, 3173, 3183, 3183, 3183, 3183, -GDK_dead_belowdot, 3183, 3187, 3187, 3203, 3203, -GDK_dead_hook, 3203, 3207, 3207, 3263, 3263, -GDK_dead_horn, 3263, 3291, 3291, 3291, 3291, -GDK_dead_stroke, 3291, 3325, 3331, 3331, 3331, -GDK_Multi_key, 3331, 3331, 7996, 11712, 13692, +GDK_dead_stroke, 132, 166, 172, 172, 172, +GDK_dead_grave, 172, 228, 315, 527, 527, +GDK_dead_acute, 527, 585, 678, 954, 954, +GDK_dead_circumflex, 954, 1042, 1042, 1242, 1242, +GDK_dead_tilde, 1242, 1302, 1365, 1505, 1505, +GDK_dead_macron, 1505, 1529, 1529, 1601, 1601, +GDK_dead_breve, 1601, 1637, 1637, 1661, 1661, +GDK_dead_abovedot, 1661, 1675, 1675, 1707, 1707, +GDK_dead_diaeresis, 1707, 1771, 1771, 1795, 1795, +GDK_dead_abovering, 1795, 1799, 1799, 1799, 1799, +GDK_dead_doubleacute, 1799, 1807, 1807, 1807, 1807, +GDK_dead_caron, 1807, 1811, 1811, 1819, 1819, +GDK_dead_cedilla, 1819, 1823, 1823, 1823, 1823, +GDK_dead_ogonek, 1823, 1827, 1827, 1827, 1827, +GDK_dead_iota, 1827, 1849, 1948, 2380, 3040, +GDK_dead_voiced_sound, 3040, 3086, 3086, 3086, 3086, +GDK_dead_semivoiced_sound, 3086, 3096, 3096, 3096, 3096, +GDK_dead_belowdot, 3096, 3106, 3106, 3122, 3122, +GDK_dead_hook, 3122, 3126, 3126, 3182, 3182, +GDK_dead_psili, 3182, 3210, 3210, 3210, 3210, +GDK_dead_dasia, 3210, 3242, 3242, 3242, 3242, +GDK_Multi_key, 3242, 3242, 8078, 11766, 13626, +GDK_D, 0x0110, +GDK_G, 0x01E4, +GDK_H, 0x0126, +GDK_I, 0x0197, +GDK_L, 0x0141, +GDK_O, 0x00D8, +GDK_T, 0x0166, +GDK_Z, 0x01B5, +GDK_b, 0x0180, +GDK_d, 0x0111, +GDK_g, 0x01E5, +GDK_h, 0x0127, +GDK_i, 0x0268, +GDK_l, 0x0142, +GDK_o, 0x00F8, +GDK_t, 0x0167, +GDK_z, 0x01B6, +GDK_dead_acute, GDK_O, 0x01FE, +GDK_dead_acute, GDK_o, 0x01FF, GDK_space, 0x0060, GDK_Abreve, 0x1EB0, GDK_abreve, 0x1EB1, @@ -118,33 +138,33 @@ GDK_Greek_omega, 0x1F7C, GDK_dead_grave, 0x0060, GDK_dead_diaeresis, GDK_Greek_iota, 0x1FD2, GDK_dead_diaeresis, GDK_Greek_upsilon, 0x1FE2, -GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F0B, -GDK_dead_ogonek, GDK_Greek_EPSILON, 0x1F1B, -GDK_dead_ogonek, GDK_Greek_ETA, 0x1F2B, -GDK_dead_ogonek, GDK_Greek_IOTA, 0x1F3B, -GDK_dead_ogonek, GDK_Greek_OMICRON, 0x1F4B, -GDK_dead_ogonek, GDK_Greek_UPSILON, 0x1F5B, -GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1F6B, -GDK_dead_ogonek, GDK_Greek_alpha, 0x1F03, -GDK_dead_ogonek, GDK_Greek_epsilon, 0x1F13, -GDK_dead_ogonek, GDK_Greek_eta, 0x1F23, -GDK_dead_ogonek, GDK_Greek_iota, 0x1F33, -GDK_dead_ogonek, GDK_Greek_omicron, 0x1F43, -GDK_dead_ogonek, GDK_Greek_upsilon, 0x1F53, -GDK_dead_ogonek, GDK_Greek_omega, 0x1F63, -GDK_dead_horn, GDK_Greek_ALPHA, 0x1F0A, -GDK_dead_horn, GDK_Greek_EPSILON, 0x1F1A, -GDK_dead_horn, GDK_Greek_ETA, 0x1F2A, -GDK_dead_horn, GDK_Greek_IOTA, 0x1F3A, -GDK_dead_horn, GDK_Greek_OMICRON, 0x1F4A, -GDK_dead_horn, GDK_Greek_OMEGA, 0x1F6A, -GDK_dead_horn, GDK_Greek_alpha, 0x1F02, -GDK_dead_horn, GDK_Greek_epsilon, 0x1F12, -GDK_dead_horn, GDK_Greek_eta, 0x1F22, -GDK_dead_horn, GDK_Greek_iota, 0x1F32, -GDK_dead_horn, GDK_Greek_omicron, 0x1F42, -GDK_dead_horn, GDK_Greek_upsilon, 0x1F52, -GDK_dead_horn, GDK_Greek_omega, 0x1F62, +GDK_dead_psili, GDK_Greek_ALPHA, 0x1F0A, +GDK_dead_psili, GDK_Greek_EPSILON, 0x1F1A, +GDK_dead_psili, GDK_Greek_ETA, 0x1F2A, +GDK_dead_psili, GDK_Greek_IOTA, 0x1F3A, +GDK_dead_psili, GDK_Greek_OMICRON, 0x1F4A, +GDK_dead_psili, GDK_Greek_OMEGA, 0x1F6A, +GDK_dead_psili, GDK_Greek_alpha, 0x1F02, +GDK_dead_psili, GDK_Greek_epsilon, 0x1F12, +GDK_dead_psili, GDK_Greek_eta, 0x1F22, +GDK_dead_psili, GDK_Greek_iota, 0x1F32, +GDK_dead_psili, GDK_Greek_omicron, 0x1F42, +GDK_dead_psili, GDK_Greek_upsilon, 0x1F52, +GDK_dead_psili, GDK_Greek_omega, 0x1F62, +GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F0B, +GDK_dead_dasia, GDK_Greek_EPSILON, 0x1F1B, +GDK_dead_dasia, GDK_Greek_ETA, 0x1F2B, +GDK_dead_dasia, GDK_Greek_IOTA, 0x1F3B, +GDK_dead_dasia, GDK_Greek_OMICRON, 0x1F4B, +GDK_dead_dasia, GDK_Greek_UPSILON, 0x1F5B, +GDK_dead_dasia, GDK_Greek_OMEGA, 0x1F6B, +GDK_dead_dasia, GDK_Greek_alpha, 0x1F03, +GDK_dead_dasia, GDK_Greek_epsilon, 0x1F13, +GDK_dead_dasia, GDK_Greek_eta, 0x1F23, +GDK_dead_dasia, GDK_Greek_iota, 0x1F33, +GDK_dead_dasia, GDK_Greek_omicron, 0x1F43, +GDK_dead_dasia, GDK_Greek_upsilon, 0x1F53, +GDK_dead_dasia, GDK_Greek_omega, 0x1F63, GDK_Multi_key, GDK_quotedbl, GDK_U, 0x01DB, GDK_Multi_key, GDK_quotedbl, GDK_u, 0x01DC, GDK_Multi_key, GDK_quotedbl, GDK_Greek_iota, 0x1FD2, @@ -227,37 +247,37 @@ GDK_Greek_omicron, 0x03CC, GDK_Greek_upsilon, 0x03CD, GDK_Greek_omega, 0x03CE, GDK_dead_acute, 0x00B4, -GDK_dead_diaeresis, GDK_Greek_iota, 0x0390, -GDK_dead_diaeresis, GDK_Greek_upsilon, 0x03B0, -GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F0D, -GDK_dead_ogonek, GDK_Greek_EPSILON, 0x1F1D, -GDK_dead_ogonek, GDK_Greek_ETA, 0x1F2D, -GDK_dead_ogonek, GDK_Greek_IOTA, 0x1F3D, -GDK_dead_ogonek, GDK_Greek_OMICRON, 0x1F4D, -GDK_dead_ogonek, GDK_Greek_UPSILON, 0x1F5D, -GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1F6D, -GDK_dead_ogonek, GDK_Greek_alpha, 0x1F05, -GDK_dead_ogonek, GDK_Greek_epsilon, 0x1F15, -GDK_dead_ogonek, GDK_Greek_eta, 0x1F25, -GDK_dead_ogonek, GDK_Greek_iota, 0x1F35, -GDK_dead_ogonek, GDK_Greek_omicron, 0x1F45, -GDK_dead_ogonek, GDK_Greek_upsilon, 0x1F55, -GDK_dead_ogonek, GDK_Greek_omega, 0x1F65, -GDK_dead_horn, GDK_Greek_ALPHA, 0x1F0C, -GDK_dead_horn, GDK_Greek_EPSILON, 0x1F1C, -GDK_dead_horn, GDK_Greek_ETA, 0x1F2C, -GDK_dead_horn, GDK_Greek_IOTA, 0x1F3C, -GDK_dead_horn, GDK_Greek_OMICRON, 0x1F4C, -GDK_dead_horn, GDK_Greek_OMEGA, 0x1F6C, -GDK_dead_horn, GDK_Greek_alpha, 0x1F04, -GDK_dead_horn, GDK_Greek_epsilon, 0x1F14, -GDK_dead_horn, GDK_Greek_eta, 0x1F24, -GDK_dead_horn, GDK_Greek_iota, 0x1F34, -GDK_dead_horn, GDK_Greek_omicron, 0x1F44, -GDK_dead_horn, GDK_Greek_upsilon, 0x1F54, -GDK_dead_horn, GDK_Greek_omega, 0x1F64, GDK_dead_stroke, GDK_O, 0x01FE, GDK_dead_stroke, GDK_o, 0x01FF, +GDK_dead_diaeresis, GDK_Greek_iota, 0x0390, +GDK_dead_diaeresis, GDK_Greek_upsilon, 0x03B0, +GDK_dead_psili, GDK_Greek_ALPHA, 0x1F0C, +GDK_dead_psili, GDK_Greek_EPSILON, 0x1F1C, +GDK_dead_psili, GDK_Greek_ETA, 0x1F2C, +GDK_dead_psili, GDK_Greek_IOTA, 0x1F3C, +GDK_dead_psili, GDK_Greek_OMICRON, 0x1F4C, +GDK_dead_psili, GDK_Greek_OMEGA, 0x1F6C, +GDK_dead_psili, GDK_Greek_alpha, 0x1F04, +GDK_dead_psili, GDK_Greek_epsilon, 0x1F14, +GDK_dead_psili, GDK_Greek_eta, 0x1F24, +GDK_dead_psili, GDK_Greek_iota, 0x1F34, +GDK_dead_psili, GDK_Greek_omicron, 0x1F44, +GDK_dead_psili, GDK_Greek_upsilon, 0x1F54, +GDK_dead_psili, GDK_Greek_omega, 0x1F64, +GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F0D, +GDK_dead_dasia, GDK_Greek_EPSILON, 0x1F1D, +GDK_dead_dasia, GDK_Greek_ETA, 0x1F2D, +GDK_dead_dasia, GDK_Greek_IOTA, 0x1F3D, +GDK_dead_dasia, GDK_Greek_OMICRON, 0x1F4D, +GDK_dead_dasia, GDK_Greek_UPSILON, 0x1F5D, +GDK_dead_dasia, GDK_Greek_OMEGA, 0x1F6D, +GDK_dead_dasia, GDK_Greek_alpha, 0x1F05, +GDK_dead_dasia, GDK_Greek_epsilon, 0x1F15, +GDK_dead_dasia, GDK_Greek_eta, 0x1F25, +GDK_dead_dasia, GDK_Greek_iota, 0x1F35, +GDK_dead_dasia, GDK_Greek_omicron, 0x1F45, +GDK_dead_dasia, GDK_Greek_upsilon, 0x1F55, +GDK_dead_dasia, GDK_Greek_omega, 0x1F65, GDK_Multi_key, GDK_quotedbl, GDK_I, 0x1E2E, GDK_Multi_key, GDK_quotedbl, GDK_U, 0x01D7, GDK_Multi_key, GDK_quotedbl, GDK_i, 0x1E2F, @@ -323,6 +343,8 @@ GDK_Multi_key, GDK_macron, GDK_E, 0x1E16, GDK_Multi_key, GDK_macron, GDK_O, 0x1E52, GDK_Multi_key, GDK_macron, GDK_e, 0x1E17, GDK_Multi_key, GDK_macron, GDK_o, 0x1E53, +GDK_Multi_key, GDK_cedilla, GDK_C, 0x1E08, +GDK_Multi_key, GDK_cedilla, GDK_c, 0x1E09, GDK_Multi_key, GDK_KP_Divide, GDK_O, 0x01FE, GDK_Multi_key, GDK_KP_Divide, GDK_o, 0x01FF, GDK_space, 0x005E, @@ -451,25 +473,25 @@ GDK_Greek_omega, 0x1FF6, GDK_dead_tilde, 0x007E, GDK_dead_diaeresis, GDK_Greek_iota, 0x1FD7, GDK_dead_diaeresis, GDK_Greek_upsilon, 0x1FE7, -GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F0F, -GDK_dead_ogonek, GDK_Greek_ETA, 0x1F2F, -GDK_dead_ogonek, GDK_Greek_IOTA, 0x1F3F, -GDK_dead_ogonek, GDK_Greek_UPSILON, 0x1F5F, -GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1F6F, -GDK_dead_ogonek, GDK_Greek_alpha, 0x1F07, -GDK_dead_ogonek, GDK_Greek_eta, 0x1F27, -GDK_dead_ogonek, GDK_Greek_iota, 0x1F37, -GDK_dead_ogonek, GDK_Greek_upsilon, 0x1F57, -GDK_dead_ogonek, GDK_Greek_omega, 0x1F67, -GDK_dead_horn, GDK_Greek_ALPHA, 0x1F0E, -GDK_dead_horn, GDK_Greek_ETA, 0x1F2E, -GDK_dead_horn, GDK_Greek_IOTA, 0x1F3E, -GDK_dead_horn, GDK_Greek_OMEGA, 0x1F6E, -GDK_dead_horn, GDK_Greek_alpha, 0x1F06, -GDK_dead_horn, GDK_Greek_eta, 0x1F26, -GDK_dead_horn, GDK_Greek_iota, 0x1F36, -GDK_dead_horn, GDK_Greek_upsilon, 0x1F56, -GDK_dead_horn, GDK_Greek_omega, 0x1F66, +GDK_dead_psili, GDK_Greek_ALPHA, 0x1F0E, +GDK_dead_psili, GDK_Greek_ETA, 0x1F2E, +GDK_dead_psili, GDK_Greek_IOTA, 0x1F3E, +GDK_dead_psili, GDK_Greek_OMEGA, 0x1F6E, +GDK_dead_psili, GDK_Greek_alpha, 0x1F06, +GDK_dead_psili, GDK_Greek_eta, 0x1F26, +GDK_dead_psili, GDK_Greek_iota, 0x1F36, +GDK_dead_psili, GDK_Greek_upsilon, 0x1F56, +GDK_dead_psili, GDK_Greek_omega, 0x1F66, +GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F0F, +GDK_dead_dasia, GDK_Greek_ETA, 0x1F2F, +GDK_dead_dasia, GDK_Greek_IOTA, 0x1F3F, +GDK_dead_dasia, GDK_Greek_UPSILON, 0x1F5F, +GDK_dead_dasia, GDK_Greek_OMEGA, 0x1F6F, +GDK_dead_dasia, GDK_Greek_alpha, 0x1F07, +GDK_dead_dasia, GDK_Greek_eta, 0x1F27, +GDK_dead_dasia, GDK_Greek_iota, 0x1F37, +GDK_dead_dasia, GDK_Greek_upsilon, 0x1F57, +GDK_dead_dasia, GDK_Greek_omega, 0x1F67, GDK_Multi_key, GDK_quotedbl, GDK_Greek_iota, 0x1FD7, GDK_Multi_key, GDK_quotedbl, GDK_Greek_upsilon, 0x1FE7, GDK_Multi_key, GDK_parenleft, GDK_Greek_ALPHA, 0x1F0F, @@ -557,6 +579,8 @@ GDK_Multi_key, GDK_exclam, GDK_A, 0x1EB6, GDK_Multi_key, GDK_exclam, GDK_a, 0x1EB7, GDK_Multi_key, GDK_comma, GDK_E, 0x1E1C, GDK_Multi_key, GDK_comma, GDK_e, 0x1E1D, +GDK_Multi_key, GDK_cedilla, GDK_E, 0x1E1C, +GDK_Multi_key, GDK_cedilla, GDK_e, 0x1E1D, GDK_space, 0x02D9, GDK_i, 0x0131, GDK_Sacute, 0x1E64, @@ -623,22 +647,6 @@ GDK_Multi_key, GDK_quotedbl, GDK_u, 0x01DA, GDK_space, 0x00B8, GDK_dead_cedilla, 0x00B8, GDK_space, 0x02DB, -GDK_Greek_ALPHA, 0x1F09, -GDK_Greek_EPSILON, 0x1F19, -GDK_Greek_ETA, 0x1F29, -GDK_Greek_IOTA, 0x1F39, -GDK_Greek_OMICRON, 0x1F49, -GDK_Greek_RHO, 0x1FEC, -GDK_Greek_UPSILON, 0x1F59, -GDK_Greek_OMEGA, 0x1F69, -GDK_Greek_alpha, 0x1F01, -GDK_Greek_epsilon, 0x1F11, -GDK_Greek_eta, 0x1F21, -GDK_Greek_iota, 0x1F31, -GDK_Greek_omicron, 0x1F41, -GDK_Greek_rho, 0x1FE5, -GDK_Greek_upsilon, 0x1F51, -GDK_Greek_omega, 0x1F61, GDK_dead_ogonek, 0x02DB, GDK_space, 0x037A, GDK_Greek_alphaaccent, 0x1FB4, @@ -651,9 +659,6 @@ GDK_Greek_alpha, 0x1FB3, GDK_Greek_eta, 0x1FC3, GDK_Greek_omega, 0x1FF3, GDK_dead_iota, 0x037A, -0x0342, GDK_Greek_alpha, 0x1FB7, -0x0342, GDK_Greek_eta, 0x1FC7, -0x0342, GDK_Greek_omega, 0x1FF7, GDK_dead_grave, GDK_Greek_alpha, 0x1FB2, GDK_dead_grave, GDK_Greek_eta, 0x1FC2, GDK_dead_grave, GDK_Greek_omega, 0x1FF2, @@ -675,66 +680,54 @@ GDK_dead_tilde, 0x1F60, 0x1FA6, GDK_dead_tilde, 0x1F61, 0x1FA7, GDK_dead_tilde, 0x1F68, 0x1FAE, GDK_dead_tilde, 0x1F69, 0x1FAF, -GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F89, -GDK_dead_ogonek, GDK_Greek_ETA, 0x1F99, -GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FA9, -GDK_dead_ogonek, GDK_Greek_alpha, 0x1F81, -GDK_dead_ogonek, GDK_Greek_eta, 0x1F91, -GDK_dead_ogonek, GDK_Greek_omega, 0x1FA1, -GDK_dead_horn, GDK_Greek_ALPHA, 0x1F88, -GDK_dead_horn, GDK_Greek_ETA, 0x1F98, -GDK_dead_horn, GDK_Greek_OMEGA, 0x1FA8, -GDK_dead_horn, GDK_Greek_alpha, 0x1F80, -GDK_dead_horn, GDK_Greek_eta, 0x1F90, -GDK_dead_horn, GDK_Greek_omega, 0x1FA0, -0x0342, GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F8F, -0x0342, GDK_dead_ogonek, GDK_Greek_ETA, 0x1F9F, -0x0342, GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FAF, -0x0342, GDK_dead_ogonek, GDK_Greek_alpha, 0x1F87, -0x0342, GDK_dead_ogonek, GDK_Greek_eta, 0x1F97, -0x0342, GDK_dead_ogonek, GDK_Greek_omega, 0x1FA7, -0x0342, GDK_dead_horn, GDK_Greek_ALPHA, 0x1F8E, -0x0342, GDK_dead_horn, GDK_Greek_ETA, 0x1F9E, -0x0342, GDK_dead_horn, GDK_Greek_OMEGA, 0x1FAE, -0x0342, GDK_dead_horn, GDK_Greek_alpha, 0x1F86, -0x0342, GDK_dead_horn, GDK_Greek_eta, 0x1F96, -0x0342, GDK_dead_horn, GDK_Greek_omega, 0x1FA6, -GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F8B, -GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_ETA, 0x1F9B, -GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FAB, -GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_alpha, 0x1F83, -GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_eta, 0x1F93, -GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_omega, 0x1FA3, -GDK_dead_grave, GDK_dead_horn, GDK_Greek_ALPHA, 0x1F8A, -GDK_dead_grave, GDK_dead_horn, GDK_Greek_ETA, 0x1F9A, -GDK_dead_grave, GDK_dead_horn, GDK_Greek_OMEGA, 0x1FAA, -GDK_dead_grave, GDK_dead_horn, GDK_Greek_alpha, 0x1F82, -GDK_dead_grave, GDK_dead_horn, GDK_Greek_eta, 0x1F92, -GDK_dead_grave, GDK_dead_horn, GDK_Greek_omega, 0x1FA2, -GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F8D, -GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_ETA, 0x1F9D, -GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FAD, -GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_alpha, 0x1F85, -GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_eta, 0x1F95, -GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_omega, 0x1FA5, -GDK_dead_acute, GDK_dead_horn, GDK_Greek_ALPHA, 0x1F8C, -GDK_dead_acute, GDK_dead_horn, GDK_Greek_ETA, 0x1F9C, -GDK_dead_acute, GDK_dead_horn, GDK_Greek_OMEGA, 0x1FAC, -GDK_dead_acute, GDK_dead_horn, GDK_Greek_alpha, 0x1F84, -GDK_dead_acute, GDK_dead_horn, GDK_Greek_eta, 0x1F94, -GDK_dead_acute, GDK_dead_horn, GDK_Greek_omega, 0x1FA4, -GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F8F, -GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_ETA, 0x1F9F, -GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FAF, -GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_alpha, 0x1F87, -GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_eta, 0x1F97, -GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_omega, 0x1FA7, -GDK_dead_tilde, GDK_dead_horn, GDK_Greek_ALPHA, 0x1F8E, -GDK_dead_tilde, GDK_dead_horn, GDK_Greek_ETA, 0x1F9E, -GDK_dead_tilde, GDK_dead_horn, GDK_Greek_OMEGA, 0x1FAE, -GDK_dead_tilde, GDK_dead_horn, GDK_Greek_alpha, 0x1F86, -GDK_dead_tilde, GDK_dead_horn, GDK_Greek_eta, 0x1F96, -GDK_dead_tilde, GDK_dead_horn, GDK_Greek_omega, 0x1FA6, +GDK_dead_psili, GDK_Greek_ALPHA, 0x1F88, +GDK_dead_psili, GDK_Greek_ETA, 0x1F98, +GDK_dead_psili, GDK_Greek_OMEGA, 0x1FA8, +GDK_dead_psili, GDK_Greek_alpha, 0x1F80, +GDK_dead_psili, GDK_Greek_eta, 0x1F90, +GDK_dead_psili, GDK_Greek_omega, 0x1FA0, +GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F89, +GDK_dead_dasia, GDK_Greek_ETA, 0x1F99, +GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FA9, +GDK_dead_dasia, GDK_Greek_alpha, 0x1F81, +GDK_dead_dasia, GDK_Greek_eta, 0x1F91, +GDK_dead_dasia, GDK_Greek_omega, 0x1FA1, +GDK_dead_grave, GDK_dead_psili, GDK_Greek_ALPHA, 0x1F8A, +GDK_dead_grave, GDK_dead_psili, GDK_Greek_ETA, 0x1F9A, +GDK_dead_grave, GDK_dead_psili, GDK_Greek_OMEGA, 0x1FAA, +GDK_dead_grave, GDK_dead_psili, GDK_Greek_alpha, 0x1F82, +GDK_dead_grave, GDK_dead_psili, GDK_Greek_eta, 0x1F92, +GDK_dead_grave, GDK_dead_psili, GDK_Greek_omega, 0x1FA2, +GDK_dead_grave, GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F8B, +GDK_dead_grave, GDK_dead_dasia, GDK_Greek_ETA, 0x1F9B, +GDK_dead_grave, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAB, +GDK_dead_grave, GDK_dead_dasia, GDK_Greek_alpha, 0x1F83, +GDK_dead_grave, GDK_dead_dasia, GDK_Greek_eta, 0x1F93, +GDK_dead_grave, GDK_dead_dasia, GDK_Greek_omega, 0x1FA3, +GDK_dead_acute, GDK_dead_psili, GDK_Greek_ALPHA, 0x1F8C, +GDK_dead_acute, GDK_dead_psili, GDK_Greek_ETA, 0x1F9C, +GDK_dead_acute, GDK_dead_psili, GDK_Greek_OMEGA, 0x1FAC, +GDK_dead_acute, GDK_dead_psili, GDK_Greek_alpha, 0x1F84, +GDK_dead_acute, GDK_dead_psili, GDK_Greek_eta, 0x1F94, +GDK_dead_acute, GDK_dead_psili, GDK_Greek_omega, 0x1FA4, +GDK_dead_acute, GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F8D, +GDK_dead_acute, GDK_dead_dasia, GDK_Greek_ETA, 0x1F9D, +GDK_dead_acute, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAD, +GDK_dead_acute, GDK_dead_dasia, GDK_Greek_alpha, 0x1F85, +GDK_dead_acute, GDK_dead_dasia, GDK_Greek_eta, 0x1F95, +GDK_dead_acute, GDK_dead_dasia, GDK_Greek_omega, 0x1FA5, +GDK_dead_tilde, GDK_dead_psili, GDK_Greek_ALPHA, 0x1F8E, +GDK_dead_tilde, GDK_dead_psili, GDK_Greek_ETA, 0x1F9E, +GDK_dead_tilde, GDK_dead_psili, GDK_Greek_OMEGA, 0x1FAE, +GDK_dead_tilde, GDK_dead_psili, GDK_Greek_alpha, 0x1F86, +GDK_dead_tilde, GDK_dead_psili, GDK_Greek_eta, 0x1F96, +GDK_dead_tilde, GDK_dead_psili, GDK_Greek_omega, 0x1FA6, +GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F8F, +GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_ETA, 0x1F9F, +GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAF, +GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_alpha, 0x1F87, +GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_eta, 0x1F97, +GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_omega, 0x1FA7, GDK_Multi_key, GDK_apostrophe, GDK_Greek_alpha, 0x1FB4, GDK_Multi_key, GDK_apostrophe, GDK_Greek_eta, 0x1FC4, GDK_Multi_key, GDK_apostrophe, GDK_Greek_omega, 0x1FF4, @@ -807,18 +800,6 @@ GDK_Multi_key, GDK_acute, 0x1F60, 0x1FA4, GDK_Multi_key, GDK_acute, 0x1F61, 0x1FA5, GDK_Multi_key, GDK_acute, 0x1F68, 0x1FAC, GDK_Multi_key, GDK_acute, 0x1F69, 0x1FAD, -0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_ALPHA, 0x1F8F, -0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_ETA, 0x1F9F, -0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_OMEGA, 0x1FAF, -0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_alpha, 0x1F87, -0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_eta, 0x1F97, -0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_omega, 0x1FA7, -0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_ALPHA, 0x1F8E, -0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_ETA, 0x1F9E, -0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_OMEGA, 0x1FAE, -0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_alpha, 0x1F86, -0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_eta, 0x1F96, -0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_omega, 0x1FA6, GDK_dead_grave, GDK_Multi_key, GDK_parenleft, GDK_Greek_ALPHA, 0x1F8B, GDK_dead_grave, GDK_Multi_key, GDK_parenleft, GDK_Greek_ETA, 0x1F9B, GDK_dead_grave, GDK_Multi_key, GDK_parenleft, GDK_Greek_OMEGA, 0x1FAB, @@ -979,6 +960,9 @@ GDK_kana_HI, 0x30D4, GDK_kana_FU, 0x30D7, GDK_kana_HE, 0x30DA, GDK_kana_HO, 0x30DD, +GDK_plus, 0x2A25, +GDK_minus, 0x2A2A, +GDK_equal, 0x2A66, GDK_Abreve, 0x1EB6, GDK_abreve, 0x1EB7, GDK_Multi_key, GDK_plus, GDK_O, 0x1EE2, @@ -1015,25 +999,22 @@ GDK_Greek_omicron, 0x1F40, GDK_Greek_rho, 0x1FE4, GDK_Greek_upsilon, 0x1F50, GDK_Greek_omega, 0x1F60, -GDK_D, 0x0110, -GDK_G, 0x01E4, -GDK_H, 0x0126, -GDK_I, 0x0197, -GDK_L, 0x0141, -GDK_O, 0x00D8, -GDK_T, 0x0166, -GDK_Z, 0x01B5, -GDK_b, 0x0180, -GDK_d, 0x0111, -GDK_g, 0x01E5, -GDK_h, 0x0127, -GDK_i, 0x0268, -GDK_l, 0x0142, -GDK_o, 0x00F8, -GDK_t, 0x0167, -GDK_z, 0x01B6, -GDK_dead_acute, GDK_O, 0x01FE, -GDK_dead_acute, GDK_o, 0x01FF, +GDK_Greek_ALPHA, 0x1F09, +GDK_Greek_EPSILON, 0x1F19, +GDK_Greek_ETA, 0x1F29, +GDK_Greek_IOTA, 0x1F39, +GDK_Greek_OMICRON, 0x1F49, +GDK_Greek_RHO, 0x1FEC, +GDK_Greek_UPSILON, 0x1F59, +GDK_Greek_OMEGA, 0x1F69, +GDK_Greek_alpha, 0x1F01, +GDK_Greek_epsilon, 0x1F11, +GDK_Greek_eta, 0x1F21, +GDK_Greek_iota, 0x1F31, +GDK_Greek_omicron, 0x1F41, +GDK_Greek_rho, 0x1FE5, +GDK_Greek_upsilon, 0x1F51, +GDK_Greek_omega, 0x1F61, GDK_space, GDK_space, 0x00A0, GDK_space, GDK_apostrophe, 0x0027, GDK_space, GDK_comma, 0x00B8, @@ -1044,6 +1025,7 @@ GDK_space, GDK_asciicircum, 0x005E, GDK_space, GDK_grave, 0x0060, GDK_space, GDK_asciitilde, 0x007E, GDK_exclam, GDK_exclam, 0x00A1, +GDK_exclam, GDK_question, 0x203D, GDK_exclam, GDK_A, 0x1EA0, GDK_exclam, GDK_B, 0x1E04, GDK_exclam, GDK_D, 0x1E0C, @@ -1083,6 +1065,10 @@ GDK_exclam, GDK_v, 0x1E7F, GDK_exclam, GDK_w, 0x1E89, GDK_exclam, GDK_y, 0x1EF5, GDK_exclam, GDK_z, 0x1E93, +GDK_exclam, GDK_Ohorn, 0x1EE2, +GDK_exclam, GDK_ohorn, 0x1EE3, +GDK_exclam, GDK_Uhorn, 0x1EF0, +GDK_exclam, GDK_uhorn, 0x1EF1, GDK_quotedbl, GDK_apostrophe, 0x0344, GDK_quotedbl, GDK_comma, 0x201E, GDK_quotedbl, GDK_slash, 0x301E, @@ -1207,6 +1193,10 @@ GDK_apostrophe, GDK_ocircumflex, 0x1ED1, GDK_apostrophe, GDK_otilde, 0x1E4D, GDK_apostrophe, GDK_oslash, 0x01FF, GDK_apostrophe, GDK_udiaeresis, 0x01D8, +GDK_apostrophe, GDK_Ohorn, 0x1EDA, +GDK_apostrophe, GDK_ohorn, 0x1EDB, +GDK_apostrophe, GDK_Uhorn, 0x1EE8, +GDK_apostrophe, GDK_uhorn, 0x1EE9, GDK_apostrophe, GDK_Abreve, 0x1EAE, GDK_apostrophe, GDK_abreve, 0x1EAF, GDK_apostrophe, GDK_Emacron, 0x1E16, @@ -1421,8 +1411,20 @@ GDK_slash, GDK_leftarrow, 0x219A, GDK_slash, GDK_rightarrow, 0x219B, GDK_slash, 0x2194, 0x21AE, GDK_1, GDK_2, 0x00BD, +GDK_1, GDK_3, 0x2153, GDK_1, GDK_4, 0x00BC, +GDK_1, GDK_5, 0x2155, +GDK_1, GDK_6, 0x2159, +GDK_1, GDK_8, 0x215B, +GDK_2, GDK_3, 0x2154, +GDK_2, GDK_5, 0x2156, GDK_3, GDK_4, 0x00BE, +GDK_3, GDK_5, 0x2157, +GDK_3, GDK_8, 0x215C, +GDK_4, GDK_5, 0x2158, +GDK_5, GDK_6, 0x215A, +GDK_5, GDK_8, 0x215D, +GDK_7, GDK_8, 0x215E, GDK_colon, GDK_minus, 0x00F7, GDK_semicolon, GDK_A, 0x0104, GDK_semicolon, GDK_E, 0x0118, @@ -1461,6 +1463,7 @@ GDK_greater, GDK_quotedbl, 0x201D, GDK_greater, GDK_apostrophe, 0x2019, GDK_greater, GDK_greater, 0x00BB, GDK_greater, 0x0338, 0x226F, +GDK_question, GDK_exclam, 0x203D, GDK_question, GDK_question, 0x00BF, GDK_question, GDK_A, 0x1EA2, GDK_question, GDK_E, 0x1EBA, @@ -1480,6 +1483,10 @@ GDK_question, GDK_Ocircumflex, 0x1ED4, GDK_question, GDK_acircumflex, 0x1EA9, GDK_question, GDK_ecircumflex, 0x1EC3, GDK_question, GDK_ocircumflex, 0x1ED5, +GDK_question, GDK_Ohorn, 0x1EDE, +GDK_question, GDK_ohorn, 0x1EDF, +GDK_question, GDK_Uhorn, 0x1EEC, +GDK_question, GDK_uhorn, 0x1EED, GDK_question, GDK_Abreve, 0x1EB2, GDK_question, GDK_abreve, 0x1EB3, GDK_A, GDK_E, 0x00C6, @@ -1720,6 +1727,10 @@ GDK_grave, GDK_acircumflex, 0x1EA7, GDK_grave, GDK_ecircumflex, 0x1EC1, GDK_grave, GDK_ocircumflex, 0x1ED3, GDK_grave, GDK_udiaeresis, 0x01DC, +GDK_grave, GDK_Ohorn, 0x1EDC, +GDK_grave, GDK_ohorn, 0x1EDD, +GDK_grave, GDK_Uhorn, 0x1EEA, +GDK_grave, GDK_uhorn, 0x1EEB, GDK_grave, GDK_Abreve, 0x1EB0, GDK_grave, GDK_abreve, 0x1EB1, GDK_grave, GDK_Emacron, 0x1E14, @@ -1908,6 +1919,10 @@ GDK_asciitilde, GDK_Ocircumflex, 0x1ED6, GDK_asciitilde, GDK_acircumflex, 0x1EAB, GDK_asciitilde, GDK_ecircumflex, 0x1EC5, GDK_asciitilde, GDK_ocircumflex, 0x1ED7, +GDK_asciitilde, GDK_Ohorn, 0x1EE0, +GDK_asciitilde, GDK_ohorn, 0x1EE1, +GDK_asciitilde, GDK_Uhorn, 0x1EEE, +GDK_asciitilde, GDK_uhorn, 0x1EEF, GDK_asciitilde, GDK_Abreve, 0x1EB4, GDK_asciitilde, GDK_abreve, 0x1EB5, GDK_asciitilde, GDK_Greek_iotadieresis, 0x1FD7, @@ -1940,7 +1955,6 @@ GDK_diaeresis, GDK_apostrophe, 0x0385, GDK_diaeresis, GDK_grave, 0x1FED, GDK_diaeresis, GDK_asciitilde, 0x1FC1, GDK_diaeresis, GDK_acute, 0x0385, -GDK_diaeresis, 0x0342, 0x1FC1, GDK_diaeresis, GDK_dead_grave, 0x1FED, GDK_diaeresis, GDK_dead_acute, 0x0385, GDK_diaeresis, GDK_dead_tilde, 0x1FC1, @@ -2042,6 +2056,10 @@ GDK_acute, GDK_ocircumflex, 0x1ED1, GDK_acute, GDK_otilde, 0x1E4D, GDK_acute, GDK_oslash, 0x01FF, GDK_acute, GDK_udiaeresis, 0x01D8, +GDK_acute, GDK_Ohorn, 0x1EDA, +GDK_acute, GDK_ohorn, 0x1EDB, +GDK_acute, GDK_Uhorn, 0x1EE8, +GDK_acute, GDK_uhorn, 0x1EE9, GDK_acute, GDK_Abreve, 0x1EAE, GDK_acute, GDK_abreve, 0x1EAF, GDK_acute, GDK_Emacron, 0x1E16, @@ -2097,6 +2115,28 @@ GDK_acute, 0x1F60, 0x1F64, GDK_acute, 0x1F61, 0x1F65, GDK_acute, 0x1F68, 0x1F6C, GDK_acute, 0x1F69, 0x1F6D, +GDK_cedilla, GDK_C, 0x00C7, +GDK_cedilla, GDK_D, 0x1E10, +GDK_cedilla, GDK_E, 0x0228, +GDK_cedilla, GDK_G, 0x0122, +GDK_cedilla, GDK_H, 0x1E28, +GDK_cedilla, GDK_K, 0x0136, +GDK_cedilla, GDK_L, 0x013B, +GDK_cedilla, GDK_N, 0x0145, +GDK_cedilla, GDK_R, 0x0156, +GDK_cedilla, GDK_S, 0x015E, +GDK_cedilla, GDK_T, 0x0162, +GDK_cedilla, GDK_c, 0x00E7, +GDK_cedilla, GDK_d, 0x1E11, +GDK_cedilla, GDK_e, 0x0229, +GDK_cedilla, GDK_g, 0x0123, +GDK_cedilla, GDK_h, 0x1E29, +GDK_cedilla, GDK_k, 0x0137, +GDK_cedilla, GDK_l, 0x013C, +GDK_cedilla, GDK_n, 0x0146, +GDK_cedilla, GDK_r, 0x0157, +GDK_cedilla, GDK_s, 0x015F, +GDK_cedilla, GDK_t, 0x0163, 0x05B4, GDK_hebrew_yod, 0xFB1D, 0x05B7, 0x05F2, 0xFB1F, 0x05B7, GDK_hebrew_aleph, 0xFB2E, @@ -2520,7 +2560,6 @@ GDK_righttack, 0x0338, 0x22AC, 0x1FBF, GDK_grave, 0x1FCD, 0x1FBF, GDK_asciitilde, 0x1FCF, 0x1FBF, GDK_acute, 0x1FCE, -0x1FBF, 0x0342, 0x1FCF, 0x1FBF, GDK_dead_grave, 0x1FCD, 0x1FBF, GDK_dead_acute, 0x1FCE, 0x1FBF, GDK_dead_tilde, 0x1FCF, @@ -2528,7 +2567,6 @@ GDK_righttack, 0x0338, 0x22AC, 0x1FFE, GDK_grave, 0x1FDD, 0x1FFE, GDK_asciitilde, 0x1FDF, 0x1FFE, GDK_acute, 0x1FDE, -0x1FFE, 0x0342, 0x1FDF, 0x1FFE, GDK_dead_grave, 0x1FDD, 0x1FFE, GDK_dead_acute, 0x1FDE, 0x1FFE, GDK_dead_tilde, 0x1FDF, @@ -2666,6 +2704,8 @@ GDK_apostrophe, GDK_macron, GDK_E, 0x1E16, GDK_apostrophe, GDK_macron, GDK_O, 0x1E52, GDK_apostrophe, GDK_macron, GDK_e, 0x1E17, GDK_apostrophe, GDK_macron, GDK_o, 0x1E53, +GDK_apostrophe, GDK_cedilla, GDK_C, 0x1E08, +GDK_apostrophe, GDK_cedilla, GDK_c, 0x1E09, GDK_apostrophe, GDK_dead_circumflex, GDK_A, 0x1EA4, GDK_apostrophe, GDK_dead_circumflex, GDK_E, 0x1EBE, GDK_apostrophe, GDK_dead_circumflex, GDK_O, 0x1ED0, @@ -2950,6 +2990,8 @@ GDK_U, GDK_exclam, GDK_A, 0x1EB6, GDK_U, GDK_exclam, GDK_a, 0x1EB7, GDK_U, GDK_comma, GDK_E, 0x1E1C, GDK_U, GDK_comma, GDK_e, 0x1E1D, +GDK_U, GDK_cedilla, GDK_E, 0x1E1C, +GDK_U, GDK_cedilla, GDK_e, 0x1E1D, GDK_U, GDK_dead_cedilla, GDK_E, 0x1E1C, GDK_U, GDK_dead_cedilla, GDK_e, 0x1E1D, GDK_U, GDK_dead_belowdot, GDK_A, 0x1EB6, @@ -3140,6 +3182,8 @@ GDK_b, GDK_exclam, GDK_A, 0x1EB6, GDK_b, GDK_exclam, GDK_a, 0x1EB7, GDK_b, GDK_comma, GDK_E, 0x1E1C, GDK_b, GDK_comma, GDK_e, 0x1E1D, +GDK_b, GDK_cedilla, GDK_E, 0x1E1C, +GDK_b, GDK_cedilla, GDK_e, 0x1E1D, GDK_b, GDK_dead_cedilla, GDK_E, 0x1E1C, GDK_b, GDK_dead_cedilla, GDK_e, 0x1E1D, GDK_b, GDK_dead_belowdot, GDK_A, 0x1EB6, @@ -3313,6 +3357,8 @@ GDK_acute, GDK_macron, GDK_E, 0x1E16, GDK_acute, GDK_macron, GDK_O, 0x1E52, GDK_acute, GDK_macron, GDK_e, 0x1E17, GDK_acute, GDK_macron, GDK_o, 0x1E53, +GDK_acute, GDK_cedilla, GDK_C, 0x1E08, +GDK_acute, GDK_cedilla, GDK_c, 0x1E09, GDK_acute, GDK_dead_circumflex, GDK_A, 0x1EA4, GDK_acute, GDK_dead_circumflex, GDK_E, 0x1EBE, GDK_acute, GDK_dead_circumflex, GDK_O, 0x1ED0, @@ -3446,21 +3492,6 @@ GDK_Greek_iota, GDK_acute, 0x1F60, 0x1FA4, GDK_Greek_iota, GDK_acute, 0x1F61, 0x1FA5, GDK_Greek_iota, GDK_acute, 0x1F68, 0x1FAC, GDK_Greek_iota, GDK_acute, 0x1F69, 0x1FAD, -GDK_Greek_iota, 0x0342, GDK_Greek_alpha, 0x1FB7, -GDK_Greek_iota, 0x0342, GDK_Greek_eta, 0x1FC7, -GDK_Greek_iota, 0x0342, GDK_Greek_omega, 0x1FF7, -GDK_Greek_iota, 0x0342, 0x1F00, 0x1F86, -GDK_Greek_iota, 0x0342, 0x1F01, 0x1F87, -GDK_Greek_iota, 0x0342, 0x1F08, 0x1F8E, -GDK_Greek_iota, 0x0342, 0x1F09, 0x1F8F, -GDK_Greek_iota, 0x0342, 0x1F20, 0x1F96, -GDK_Greek_iota, 0x0342, 0x1F21, 0x1F97, -GDK_Greek_iota, 0x0342, 0x1F28, 0x1F9E, -GDK_Greek_iota, 0x0342, 0x1F29, 0x1F9F, -GDK_Greek_iota, 0x0342, 0x1F60, 0x1FA6, -GDK_Greek_iota, 0x0342, 0x1F61, 0x1FA7, -GDK_Greek_iota, 0x0342, 0x1F68, 0x1FAE, -GDK_Greek_iota, 0x0342, 0x1F69, 0x1FAF, GDK_Greek_iota, GDK_dead_grave, GDK_Greek_alpha, 0x1FB2, GDK_Greek_iota, GDK_dead_grave, GDK_Greek_eta, 0x1FC2, GDK_Greek_iota, GDK_dead_grave, GDK_Greek_omega, 0x1FF2, @@ -3819,30 +3850,6 @@ GDK_Greek_iota, GDK_acute, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAD, GDK_Greek_iota, GDK_acute, GDK_dead_dasia, GDK_Greek_alpha, 0x1F85, GDK_Greek_iota, GDK_acute, GDK_dead_dasia, GDK_Greek_eta, 0x1F95, GDK_Greek_iota, GDK_acute, GDK_dead_dasia, GDK_Greek_omega, 0x1FA5, -GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_ALPHA, 0x1F8F, -GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_ETA, 0x1F9F, -GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_OMEGA, 0x1FAF, -GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_alpha, 0x1F87, -GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_eta, 0x1F97, -GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_omega, 0x1FA7, -GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_ALPHA, 0x1F8E, -GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_ETA, 0x1F9E, -GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_OMEGA, 0x1FAE, -GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_alpha, 0x1F86, -GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_eta, 0x1F96, -GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_omega, 0x1FA6, -GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_ALPHA, 0x1F8E, -GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_ETA, 0x1F9E, -GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_OMEGA, 0x1FAE, -GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_alpha, 0x1F86, -GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_eta, 0x1F96, -GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_omega, 0x1FA6, -GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F8F, -GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_ETA, 0x1F9F, -GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAF, -GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_alpha, 0x1F87, -GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_eta, 0x1F97, -GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_omega, 0x1FA7, GDK_Greek_iota, GDK_dead_grave, GDK_parenleft, GDK_Greek_ALPHA, 0x1F8B, GDK_Greek_iota, GDK_dead_grave, GDK_parenleft, GDK_Greek_ETA, 0x1F9B, GDK_Greek_iota, GDK_dead_grave, GDK_parenleft, GDK_Greek_OMEGA, 0x1FAB, -- 2.30.2